LINQ to DataSet এ Group By অপারেটর ব্যবহার করে আপনি ডেটাকে নির্দিষ্ট একটি বা একাধিক কন্ডিশনের উপর গ্রুপ করতে পারেন। এটি SQL-এর GROUP BY
এর সমান, যেখানে আপনি ডেটাকে একটি নির্দিষ্ট ফিল্ড বা কন্ডিশনের মাধ্যমে গ্রুপ করেন এবং তারপর প্রতিটি গ্রুপের উপর কোনো অপারেশন যেমন Sum, Count, Average ইত্যাদি প্রয়োগ করতে পারেন।
LINQ-এর group by
ক্লজ ব্যবহার করে DataTable বা DataSet-এর ডেটা গ্রুপ করা যায় এবং এই গ্রুপগুলির উপর বিভিন্ন ধরনের অ্যাগ্রিগেট ফাংশনও প্রয়োগ করা সম্ভব।
ধরা যাক, আপনার কাছে একটি পণ্য (Product) সম্পর্কিত ডেটা রয়েছে এবং আপনি সেই ডেটা পণ্যের Category অনুযায়ী গ্রুপ করতে চান।
using System;
using System.Data;
using System.Linq;
class Program
{
static void Main()
{
// DataTable তৈরি
DataTable dt = new DataTable("Products");
dt.Columns.Add("ProductID", typeof(int));
dt.Columns.Add("ProductName", typeof(string));
dt.Columns.Add("Category", typeof(string));
dt.Columns.Add("Price", typeof(decimal));
// DataTable-এ ডেটা ইনসার্ট করা
dt.Rows.Add(1, "Product1", "Category1", 20.5);
dt.Rows.Add(2, "Product2", "Category1", 30.0);
dt.Rows.Add(3, "Product3", "Category2", 15.5);
dt.Rows.Add(4, "Product4", "Category2", 25.0);
// LINQ কুয়েরি দিয়ে Category অনুসারে গ্রুপিং করা
var groupedProducts = from product in dt.AsEnumerable()
group product by product.Field<string>("Category") into productGroup
select new
{
Category = productGroup.Key,
Products = productGroup
};
// গ্রুপড ডেটা প্রিন্ট করা
foreach (var group in groupedProducts)
{
Console.WriteLine($"Category: {group.Category}");
foreach (var product in group.Products)
{
Console.WriteLine($" - {product.Field<string>("ProductName")}: {product.Field<decimal>("Price")}");
}
}
}
}
আউটপুট:
Category: Category1
- Product1: 20.5
- Product2: 30
Category: Category2
- Product3: 15.5
- Product4: 25
এখানে Category কলামের ভিত্তিতে পণ্যগুলো গ্রুপ করা হয়েছে, এবং তারপর প্রতিটি গ্রুপের পণ্যগুলোর নাম ও মূল্য প্রদর্শিত হয়েছে।
আপনি group by
এর সাথে Sum, Count, Average ইত্যাদি অ্যাগ্রিগেট ফাংশন ব্যবহার করতে পারেন। নিচে একটি উদাহরণ দেয়া হলো যেখানে Category অনুসারে গ্রুপিং করার পর প্রতিটি গ্রুপের মোট মূল্য (Sum) হিসাব করা হয়েছে।
using System;
using System.Data;
using System.Linq;
class Program
{
static void Main()
{
// DataTable তৈরি
DataTable dt = new DataTable("Products");
dt.Columns.Add("ProductID", typeof(int));
dt.Columns.Add("ProductName", typeof(string));
dt.Columns.Add("Category", typeof(string));
dt.Columns.Add("Price", typeof(decimal));
// DataTable-এ ডেটা ইনসার্ট করা
dt.Rows.Add(1, "Product1", "Category1", 20.5);
dt.Rows.Add(2, "Product2", "Category1", 30.0);
dt.Rows.Add(3, "Product3", "Category2", 15.5);
dt.Rows.Add(4, "Product4", "Category2", 25.0);
// LINQ কুয়েরি দিয়ে Category অনুসারে গ্রুপিং এবং মোট মূল্য বের করা
var groupedProducts = from product in dt.AsEnumerable()
group product by product.Field<string>("Category") into productGroup
select new
{
Category = productGroup.Key,
TotalPrice = productGroup.Sum(p => p.Field<decimal>("Price"))
};
// গ্রুপড ডেটার মোট মূল্য প্রিন্ট করা
foreach (var group in groupedProducts)
{
Console.WriteLine($"Category: {group.Category}, Total Price: {group.TotalPrice}");
}
}
}
আউটপুট:
Category: Category1, Total Price: 50.5
Category: Category2, Total Price: 40.5
এখানে প্রতিটি Category এর জন্য পণ্যের মোট মূল্য হিসাব করা হয়েছে।
আপনি Count ফাংশনও ব্যবহার করতে পারেন গ্রুপের মধ্যে কতটি রেকর্ড আছে তা গণনা করতে।
using System;
using System.Data;
using System.Linq;
class Program
{
static void Main()
{
// DataTable তৈরি
DataTable dt = new DataTable("Products");
dt.Columns.Add("ProductID", typeof(int));
dt.Columns.Add("ProductName", typeof(string));
dt.Columns.Add("Category", typeof(string));
dt.Columns.Add("Price", typeof(decimal));
// DataTable-এ ডেটা ইনসার্ট করা
dt.Rows.Add(1, "Product1", "Category1", 20.5);
dt.Rows.Add(2, "Product2", "Category1", 30.0);
dt.Rows.Add(3, "Product3", "Category2", 15.5);
dt.Rows.Add(4, "Product4", "Category2", 25.0);
// LINQ কুয়েরি দিয়ে Category অনুসারে গ্রুপিং এবং প্রতি গ্রুপে পণ্যের সংখ্যা বের করা
var groupedProducts = from product in dt.AsEnumerable()
group product by product.Field<string>("Category") into productGroup
select new
{
Category = productGroup.Key,
ProductCount = productGroup.Count()
};
// গ্রুপড ডেটার পণ্যের সংখ্যা প্রিন্ট করা
foreach (var group in groupedProducts)
{
Console.WriteLine($"Category: {group.Category}, Product Count: {group.ProductCount}");
}
}
}
আউটপুট:
Category: Category1, Product Count: 2
Category: Category2, Product Count: 2
এখানে প্রতিটি Category এর মধ্যে কতটি পণ্য আছে তা গুনে দেখানো হয়েছে।
LINQ to DataSet-এ Group By অপারেটর ব্যবহার করে আপনি DataTable বা DataSet এর ডেটাকে একটি বা একাধিক কলামের ভিত্তিতে গ্রুপ করতে পারেন এবং তারপর সেই গ্রুপগুলির উপর অ্যাগ্রিগেট ফাংশন প্রয়োগ করতে পারেন, যেমন Sum, Count, Average ইত্যাদি। এটি আপনাকে ডেটাকে বিশ্লেষণ করতে এবং বিভিন্ন গ্রুপের তথ্য একত্রিত করতে সহায়ক।
common.read_more